
///////////////////////////////////////////////////////////////////////////////
//
//  Copyright (c) 2009, Perry L Miller IV
//  All rights reserved.
//  BSD License: http://www.opensource.org/licenses/bsd-license.html
//
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
//
//  Macros for this library.
//
///////////////////////////////////////////////////////////////////////////////

#ifndef _SCENE_GRAPH_MACROS_H_
#define _SCENE_GRAPH_MACROS_H_


///////////////////////////////////////////////////////////////////////////////
//
//  Macros to put in every object.
//
///////////////////////////////////////////////////////////////////////////////

#define SCENE_GRAPH_OBJECT(class_name,base_class_name) \
  typedef base_class_name BaseClass; \
  USUL_REFERENCED_CLASS ( class_name )


///////////////////////////////////////////////////////////////////////////////
//
//  Macros to put in every node class.
//
///////////////////////////////////////////////////////////////////////////////

#define SCENE_GRAPH_NODE(class_name,base_class_name) \
  SCENE_GRAPH_OBJECT ( class_name, base_class_name ); \
  virtual void accept ( SceneGraph::Visitors::Visitor &v ) { v.visit ( *this ); }


///////////////////////////////////////////////////////////////////////////////
//
//  Macros to put in every attribute class.
//
///////////////////////////////////////////////////////////////////////////////

#define SCENE_GRAPH_ATTRIBUTE(class_name,base_class_name) \
  SCENE_GRAPH_OBJECT ( class_name, base_class_name ); \
  virtual void accept ( SceneGraph::Visitors::Visitor &v ) { v.visit ( *this ); }


///////////////////////////////////////////////////////////////////////////////
//
//  Macros to put in every event class.
//
///////////////////////////////////////////////////////////////////////////////

#define SCENE_GRAPH_EVENT(class_name,base_class_name) \
  SCENE_GRAPH_OBJECT ( class_name, base_class_name )

#endif // _SCENE_GRAPH_MACROS_H_
